home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / Apps / ScreenSavers / BackSpaceViews / WallPaperView.BackModule / WallPaperView.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  3.3 KB  |  172 lines

  1. #import <c.h>
  2. #import <appkit/appkit.h>
  3.  
  4. #import "Thinker.h"
  5.  
  6. #import "WallPaperView.h"
  7. #import "WallPaperWrap.h"
  8.  
  9. #define MODULE "WallPaper"
  10.  
  11. #define registerDefaults(d) (void) NXRegisterDefaults([NXApp appName], d)
  12.  
  13. #define getStringDefault(s) NXGetDefaultValue([NXApp appName], s)
  14. #define writeStringDefault(s, v) NXWriteDefault([NXApp appName], s, v)
  15.  
  16. #define getFloatDefault(s) atof(getStringDefault(s))
  17.  
  18. #define STEPDEFAULTNAME "WallPaperStep"
  19. #define STEP getFloatDefault(STEPDEFAULTNAME)
  20.  
  21. #define COUNTDEFAULTNAME "WallPaperCount"
  22. #define COUNT getFloatDefault(COUNTDEFAULTNAME)
  23.  
  24. #define WILDDEFAULTNAME "WallPaperWildness"
  25. #define WILD getFloatDefault(WILDDEFAULTNAME)
  26.  
  27. #define BRIGHTDEFAULTNAME "WallPaperBrightness"
  28. #define BRIGHT getFloatDefault(BRIGHTDEFAULTNAME)
  29.  
  30. static NXDefaultsVector WallPaperDefaults = {
  31.     { STEPDEFAULTNAME, "0.1" },
  32.     { COUNTDEFAULTNAME, "4.0" },
  33.     { WILDDEFAULTNAME, "0.5" },
  34.     { BRIGHTDEFAULTNAME, "0.5" },
  35.     { NULL, NULL }
  36.     };
  37.  
  38. @implementation WallPaperView
  39.  
  40. - initFrame:(NXRect *) frameRect
  41. {
  42.     [super initFrame:frameRect];
  43.  
  44.     registerDefaults(WallPaperDefaults);
  45.  
  46.     [NXApp getScreenSize:&size];
  47.  
  48.     size.height = (size.width /= COUNT);
  49.  
  50.     [(image = [[NXImage alloc] initSize:&size]) getSize:&size];
  51.  
  52.     inspector = nil;
  53.  
  54.     step = -1.0;
  55.     
  56.     loadwallpaper();
  57.  
  58.     return [self allocateGState];
  59. }
  60.  
  61. - drawSelf:(const NXRect *) rects :(int) rectCount
  62. {
  63.     if (rects == NULL || rectCount == 0) return self;
  64.  
  65.     PSsetgray(NX_BLACK);
  66.  
  67.     NXRectFill(rects);
  68.  
  69.     step = -1.0;
  70.  
  71.     return self;
  72. }
  73.  
  74. - free
  75. {
  76.     [image free];
  77.  
  78.     return [super free];
  79. }
  80.  
  81. - tessellate
  82. {
  83.     float x, y, limit;
  84.     int gState = [self gState];
  85.  
  86.     limit = bounds.size.width + bounds.origin.x;
  87.  
  88.     for(x = bounds.origin.x + size.width; x < limit; x += size.width)
  89.         PScomposite(0.0, 0.0, size.width, size.height, gState, x, 0.0, NX_COPY);
  90.  
  91.     limit = bounds.size.height + bounds.origin.y;
  92.  
  93.     for(y = bounds.origin.y + size.height; y < limit; y += size.height)
  94.         PScomposite(0.0, 0.0, bounds.size.width, size.height, gState, 0.0, y, NX_COPY);
  95.  
  96.     return self;
  97. }
  98.  
  99. - oneStep
  100. {
  101.     float increment = STEP;
  102.     static NXPoint point = { 0.0, 0.0 };
  103.  
  104.     if(step < increment) {
  105.         [image lockFocus]; {
  106.             wallpaper(WILD, size.width, BRIGHT);
  107.             } [image unlockFocus];
  108.  
  109.         if(step < 0.0) {
  110.             [image composite:NX_COPY toPoint:&point];
  111.             step = 0.0;
  112.             }
  113.         else step = increment;
  114.         }
  115.     else {
  116.         [image dissolve:(step * step) toPoint:&point];
  117.  
  118.         if((step += increment) > 1.0) step = 0.0;
  119.         }
  120.  
  121.     return [self tessellate];
  122. }
  123.  
  124. - inspector:sender
  125. {
  126.     char buffer[MAXPATHLEN];
  127.  
  128.     if (inspector == nil) {
  129.         (void) sprintf(buffer,"%s/%s.nib", [sender moduleDirectory:MODULE], MODULE);
  130.         [NXApp loadNibFile:buffer owner:self withNames:NO];
  131.         }
  132.  
  133.     return inspector;
  134. }
  135.  
  136. - (BOOL) useBufferedWindow { return YES; }
  137.  
  138. - (const char *) windowTitle { return MODULE; }
  139.  
  140. - setDefault:sender
  141. {
  142.     [sender setTag:YES];
  143.  
  144.     if([wildness tag]) {
  145.         float wild = rint([wildness floatValue] * 2.0) / 2.0; /* coerce to 0.5 resolution */
  146.         [wildness setFloatValue:wild];
  147.         (void) writeStringDefault(WILDDEFAULTNAME, [wildness stringValue]);
  148.         }
  149.  
  150.     if([brightness tag]) (void) writeStringDefault(BRIGHTDEFAULTNAME, [brightness stringValue]);
  151.  
  152.     [sender setTag:NO];
  153.  
  154.     return self;
  155. }
  156.  
  157. - setWildness:anObject
  158. {
  159.     [(wildness = anObject) setFloatValue:WILD];
  160.  
  161.     return self;
  162. }
  163.  
  164. - setBrightness:anObject
  165. {
  166.     [(brightness = anObject) setFloatValue:BRIGHT];
  167.  
  168.     return self;
  169. }
  170.  
  171. @end
  172.